package engine;

import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

public class LeitorDeEngines {
	private String ARQUIVOLISTA = "sites.list";
	private ArrayList<SearchEngine> engines = new ArrayList<SearchEngine>();
	private static LeitorDeEngines leitor;
	private ArrayList<String> lista = new ArrayList<String>();
 
	private LeitorDeEngines() {
		try {
			File file = new File(ARQUIVOLISTA);
			Scanner sc = new Scanner(file);
			while(sc.hasNextLine()) {
				lista.add(sc.nextLine());
			}
			for (int k=0; k < lista.size();k++) {
				engines.add(new SearchEngine(lista.get(k)));
			}
		} catch(Exception e) {
			System.out.println("sites.list não foi encontrado.");
		}
	}
	
	public static LeitorDeEngines getInstance() {
		if (leitor == null) {
			leitor = new LeitorDeEngines();
		}
		return leitor;
	}
	
	public String pesquisaSTJ(String livre, String numero, String datainicio, String datafim, String ministro, String orgao,
			String autoridade, String localidade, String titulo, String apelido) {
			return engines.get(0).pesquisa(livre, numero, datainicio, datafim, ministro, orgao, autoridade, localidade, titulo, apelido);
	}
	
	public String pesquisaSTF(String livre, String numero, String datainicio, String datafim, String ministro, String orgao,
			String autoridade, String localidade, String titulo, String apelido) {
			return engines.get(1).pesquisa(livre, numero, datainicio, datafim, ministro, orgao, autoridade, localidade, titulo, apelido);
	}
	
	public String pesquisaLexml(String livre, String numero, String datainicio, String datafim, String ministro, String orgao,
			String autoridade, String localidade, String titulo, String apelido) {
			return engines.get(2).pesquisa(livre, numero, datainicio, datafim, ministro, orgao, autoridade, localidade, titulo, apelido);
	}

	
	public ArrayList<String> pesquisa(String livre, String numero, String datainicio, String datafim, String ministro, String orgao,
			String autoridade, String localidade, String titulo, String apelido, boolean jurisprudencia, boolean legislacao) {
			ArrayList<String> linksDeResultados = new ArrayList<String>();
			for(int k = 0; k < engines.size(); k++) {
				String results = engines.get(k).pesquisa(livre, numero, datainicio, datafim, ministro, orgao, 
							autoridade, localidade, titulo, apelido);
				if ((jurisprudencia) && (engines.get(k).getTipoDaEngine().equalsIgnoreCase("jurisprudencia"))) {
					linksDeResultados.add(results);
				}
				if ((legislacao) && (engines.get(k).getTipoDaEngine().equalsIgnoreCase("legislacao"))) {
					linksDeResultados.add(results);
				}
				
			}
			return linksDeResultados;
	}
}
